import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { Message } from 'element-ui'
import { getTokenTime } from './auth'

// 设置token超时时间
const endTime = 30 * 60 * 1000
const instance = axios.create({
  // 基地址设置到环境变量中
  baseURL: process.env.VUE_APP_BASE_API,
  // 甚至超时时间
  timeout: 5000
})
// 添加请求拦截器
instance.interceptors.request.use(
  config => {
    //  统一添加token
    const token = store.getters.token
    if (token) {
      // 获取当前时间戳
      const time = getTokenTime()
      // 时间戳相减获取时间戳
      const space = Date.now() - time
      // 如果大于规定时间戳
      if (space > endTime) {
        // 删除数据跳转回首页并提示用户
        store.dispatch('user/logout')
        router.push('/login')
        Message({
          type: 'error',
          message: 'token超时'
        })
        return Promise.reject(new Error('token超时'))
      }
      config.headers.Authorization = `Beare ${token}`
    }
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    const { data, message, success } = response.data
    if (success) {
      return data
    } else {
      return Promise.reject(error)
    }
  },
  error => {
    // 对响应错误做点什么
    // 判断token是否过期
    console.dir(error)
    if (
      error.response &&
      error.response.data &&
      error.response.data.code === 10002
    ) {
      // 调用接口删除数据跳转回登陆页面，并提示用户

      store.dispatch('user/logout')
      router.push('/login')
      Message({
        type: 'error',
        message: '登录超时，请重新登录'
      })
    }
    return Promise.reject(error)
  }
)

export default instance
